<?xml version="1.0" encoding="utf-8"?>
<Patterns xmlns="urn:shemas-jetbrains-com:member-reordering-patterns">

	<!-- Do not reorder COM interfaces -->
	<Pattern>
		<Match>
			<And Weight="2000">
				<Kind Is="interface" />
				<HasAttribute CLRName="System.Runtime.InteropServices.InterfaceTypeAttribute" Inherit="true" />
			</And>
		</Match>
	</Pattern>

	<!-- Do not reorder P/Invoke structs -->
	<Pattern>
		<Match>
			<And Weight="2000">
				<Or>
					<Kind Is="struct" />
					<Kind Is="class" />
				</Or>
				<HasAttribute CLRName="System.Runtime.InteropServices.StructLayoutAttribute" Inherit="true" />
			</And>
		</Match>
	</Pattern>

	<!-- Do not reorder P/Invoke classes (called xxxNativeMethods) -->
	<Pattern>
		<Match>
			<And Weight="2000">
				<Kind Is="class" />
				<Name Is=".*NativeMethods" />
			</And>
		</Match>
	</Pattern>

	<!-- StyleCop pattern -->
	<Pattern RemoveAllRegions="true">
		<Match>
			<Or Weight="1000">
				<Kind Is="class" />
				<Kind Is="struct" />
				<Kind Is="interface" />
			</Or>
		</Match>

		<!-- constants and fields -->
		<Entry>
			<Match>
				<Or>
					<Kind Is="constant" />
					<Kind Is="field" />
				</Or>
			</Match>
			<Sort>
				<Kind Order="constant field" />
				<Access Order="public internal protected-internal protected private" />
				<Readonly />
				<Static />
				<Name />
			</Sort>
		</Entry>

		<!-- constructors -->
		<Entry>
			<Match>
				<Or>
					<Kind Is="constructor" />
					<Kind Is="destructor" />
				</Or>
			</Match>
			<Sort>
				<Static />
				<Kind Order="constructor destructor" />
				<Access Order="public internal protected-internal protected private" />
			</Sort>
		</Entry>

		<!-- delegates -->
		<Entry>
			<Match>
				<Kind Is="delegate" />
			</Match>
			<Sort>
				<Access Order="public internal protected-internal protected private" />
				<Static />
				<Name />
			</Sort>
		</Entry>

		<!-- events -->
		<Entry>
			<Match>
				<Kind Is="event" />
			</Match>
			<Sort>
				<Access Order="public internal protected-internal protected private" />
				<Static />
				<Name />
			</Sort>
		</Entry>

		<!-- enum -->
		<Entry>
			<Match>
				<Kind Is="enum" />
			</Match>
			<Sort>
				<Access Order="public internal protected-internal protected private" />
				<Name />
			</Sort>
		</Entry>

		<!-- interfaces -->
		<Entry>
			<Match>
				<Kind Is="interface" />
			</Match>
			<Sort>
				<Access Order="public internal protected-internal protected private" />
				<Name />
			</Sort>
		</Entry>

		<!-- interface explicit properties implementation -->
		<Entry>
			<Match>
				<And>
					<ImplementsInterface />
					<Kind Is="property" />
					<Not>
						<Or>
							<Kind Is="indexer" />
							<Access Is="public" />
						</Or>
					</Not>
				</And>
			</Match>
			<Sort>
				<Name />
			</Sort>
		</Entry>

		<!-- all other properties -->
		<Entry>
			<Match>
				<And>
					<Kind Is="property" />
					<Not>
						<Kind Is="indexer" />
					</Not>
				</And>
			</Match>
			<Sort>
				<Access Order="public internal protected-internal protected private" />
				<Static />
				<Abstract />
				<Virtual />
				<Override />
				<Name />
			</Sort>
		</Entry>

		<!-- interface explicit indexers implementation -->
		<Entry>
			<Match>
				<And>
					<ImplementsInterface />
					<Kind Is="indexer" />
					<Not>
						<Access Is="public" />
					</Not>
				</And>
			</Match>
			<Sort>
				<Name />
			</Sort>
		</Entry>

		<!-- all other indexers -->
		<Entry>
			<Match>
				<Kind Is="indexer" />
			</Match>
			<Sort>
				<Access Order="public internal protected-internal protected private" />
				<Static />
				<Abstract />
				<Virtual />
				<Override />
				<Name />
			</Sort>
		</Entry>

		<!-- operator -->
		<Entry>
			<Match>
				<Kind Is="operator" />
			</Match>
			<Sort>
				<Access Order="public internal protected-internal protected private" />
				<Static />
				<Abstract />
				<Virtual />
				<Override />
				<Name />
			</Sort>
		</Entry>

		<!-- interface explicit methods implementation -->
		<Entry>
			<Match>
				<And>
					<ImplementsInterface />
					<Kind Is="method" />
					<Not>
						<Access Is="public" />
					</Not>
				</And>
			</Match>
			<Sort>
				<Name />
			</Sort>
		</Entry>

		<!-- all other methods -->
		<Entry>
			<Match>
				<Kind Is="method" />
			</Match>
			<Sort>
				<Access Order="public internal protected-internal protected private" />
				<Static />
				<Abstract />
				<Virtual />
				<Override />
				<Name />
			</Sort>
		</Entry>

		<!-- all other members -->
		<Entry />

		<!--nested types-->
		<Entry>
			<Match>
				<Kind Is="type" />
			</Match>
			<Sort>
				<Access Order="public internal protected-internal protected private" />
				<Static />
				<Abstract />
				<Virtual />
				<Override />
				<Name />
			</Sort>
		</Entry>

	</Pattern>
</Patterns>